<?php

/**
 * This is the model class for table "compra".
 *
 * The followings are the available columns in table 'compra':
 * @property integer $idCompra
 * @property integer $proveedor
 * @property string $fecha_pedido
 * @property integer $forma_pago
 * @property string $fecha_envio
 * @property integer $tipo_comprobante
 * @property integer $prefijo_comprobante
 * @property integer $numero_comprobante
 * @property string $neto
 * @property string $iva_credito
 * @property string $iva_27
 * @property string $impuesto_interno
 * @property string $exento
 * @property string $retenciones
 * @property string $descuento
 * @property integer $rubro
 * @property integer $sucursal
 * @property string $mes_iva
 * @property string $observacion
 * @property integer $saldado
 * @property integer $anulado
 * @property string $fecha_anulado
 *
 * The followings are the available model relations:
 * @property Proveedor $proveedor0
 * @property Comprobante $tipoComprobante
 * @property RubroGasto $rubro0
 * @property Sucursal $sucursal0
 * @property Formadepago $formaPago
 * @property DetalleCompra[] $detalleCompras
 */
class Compra extends CActiveRecord
{
	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'compra';
	}
	public function defaultScope()
	{
		return array(
				'condition'=>"rubro = 1",
				'order'=>"fecha_pedido DESC",
		);
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('proveedor, fecha_pedido, forma_pago, fecha_envio, tipo_comprobante, prefijo_comprobante, numero_comprobante, neto, iva_credito, rubro, sucursal, mes_iva', 'required'),
			array('proveedor, forma_pago, tipo_comprobante, prefijo_comprobante, numero_comprobante, rubro, sucursal, saldado, anulado', 'numerical', 'integerOnly'=>true),
			array('neto, iva_credito, iva_27, impuesto_interno, exento, retenciones, descuento', 'length', 'max'=>10),
			array('observacion, fecha_anulado', 'safe'),
			array('fecha_envio','compare','compareAttribute'=>'fecha_pedido','operator'=>'>='),
			// The following rule is used by search().
			// @todo Please remove those attributes that should not be searched.
			array('idCompra, proveedor, fecha_pedido, forma_pago, fecha_envio, tipo_comprobante, prefijo_comprobante, numero_comprobante, neto, iva_credito, iva_27, impuesto_interno, exento, retenciones, descuento, rubro, sucursal, mes_iva, observacion, saldado, anulado, fecha_anulado', 'safe', 'on'=>'search'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
			'proveedor0' => array(self::BELONGS_TO, 'Proveedor', 'proveedor'),
			'tipoComprobante' => array(self::BELONGS_TO, 'Comprobante', 'tipo_comprobante'),
			'rubro0' => array(self::BELONGS_TO, 'RubroGasto', 'rubro'),
			'sucursal0' => array(self::BELONGS_TO, 'Sucursal', 'sucursal'),
			'formaPago' => array(self::BELONGS_TO, 'Formadepago', 'forma_pago'),
			'detalleCompras' => array(self::HAS_MANY, 'DetalleCompra', 'compra'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'idCompra' => 'Id Compra',
			'proveedor' => 'Proveedor',
			'fecha_pedido' => 'Fecha Pedido',
			'forma_pago' => 'Forma Pago',
			'fecha_envio' => 'Fecha Envio',
			'tipo_comprobante' => 'Tipo',
			'prefijo_comprobante' => 'Prefijo',
			'numero_comprobante' => 'Numero',
			'neto' => 'Neto',
			'iva_credito' => 'Iva Credito',
			'iva_27' => 'Iva 27',
			'impuesto_interno' => 'Impuesto Interno',
			'exento' => 'Exento',
			'retenciones' => 'Retenciones',
			'descuento' => 'Descuento',
			'rubro' => 'Rubro',
			'sucursal' => 'Sucursal',
			'mes_iva' => 'Mes Iva',
			'observacion' => 'Observacion',
			'saldado' => 'Saldado',
			'anulado' => 'Anulado',
			'fecha_anulado' => 'Fecha Anulado',
		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 *
	 * Typical usecase:
	 * - Initialize the model fields with values from filter form.
	 * - Execute this method to get CActiveDataProvider instance which will filter
	 * models according to data in model fields.
	 * - Pass data provider to CGridView, CListView or any similar widget.
	 *
	 * @return CActiveDataProvider the data provider that can return the models
	 * based on the search/filter conditions.
	 */
	public function search()
	{
		// @todo Please modify the following code to remove attributes that should not be searched.

		$criteria=new CDbCriteria;
		$criteria->with = array('proveedor0');
		$criteria->compare('idCompra',$this->idCompra);
		$criteria->compare('proveedor0.nombre_compania',$this->proveedor,true);
		$criteria->compare('DATE_FORMAT(fecha_pedido,"%d/%m/%Y")',$this->fecha_pedido,true);
		$criteria->compare('forma_pago',$this->forma_pago);
		$criteria->compare('DATE_FORMAT(fecha_envio,"%d/%m/%Y")',$this->fecha_envio,true);
		$criteria->compare('tipo_comprobante',$this->tipo_comprobante);
		$criteria->compare('prefijo_comprobante',$this->prefijo_comprobante);
		$criteria->compare('numero_comprobante',$this->numero_comprobante);
		$criteria->compare('neto',$this->neto,true);
		$criteria->compare('iva_credito',$this->iva_credito,true);
		$criteria->compare('iva_27',$this->iva_27,true);
		$criteria->compare('impuesto_interno',$this->impuesto_interno,true);
		$criteria->compare('exento',$this->exento,true);
		$criteria->compare('retenciones',$this->retenciones,true);
		$criteria->compare('descuento',$this->descuento,true);
		$criteria->compare('rubro',$this->rubro);
		$criteria->compare('sucursal',$this->sucursal);
		$criteria->compare('mes_iva',$this->mes_iva,true);
		$criteria->compare('observacion',$this->observacion,true);
		$criteria->compare('saldado',$this->saldado);
		$criteria->compare('anulado',$this->anulado);
		$criteria->compare('fecha_anulado',$this->fecha_anulado,true);

		return new CActiveDataProvider($this, array(
			'criteria'=>$criteria,'sort'=>array(
					'defaultOrder'=>'fecha_pedido DESC',)
		));
	}

	/**
	 * Returns the static model of the specified AR class.
	 * Please note that you should have this exact method in all your CActiveRecord descendants!
	 * @param string $className active record class name.
	 * @return Compra the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}
}
